package com.csw.android.dev_utils.ex

import android.database.Cursor

/**
 * 读取列的下标并对下标范围以及列是否为空进行检查，返回可空的结果，参考官方的扩展[androidx.core.database.getLongOrNull]
 *
 * @param columnName 列的名称
 * @param invokeFunction cursor的getXXX方法，例如[Cursor.getLong]
 * @return 列值
 */
inline fun <reified T> Cursor.getValueOrNull(
    columnName: String?,
    invokeFunction: (Int) -> T?
): T? {
    columnName ?: return null
    return getValueOrNull(
        getColumnIndex(columnName),
        invokeFunction
    )
}

/**
 * 对下标范围以及列是否为空进行检查，返回可空的结果，参考官方的扩展[androidx.core.database.getLongOrNull]
 *
 * @param columnIndex 列下标，当下标<0或者为空时，返回null
 * @param invokeFunction cursor的getXXX方法，例如[Cursor.getLong]
 * @return 列值
 */
inline fun <reified T> Cursor.getValueOrNull(
    columnIndex: Int?,
    invokeFunction: (Int) -> T?
): T? {
    if (columnIndex == null || columnIndex < 0) {
        return null
    }
    return if (isNull(columnIndex)) null else invokeFunction(columnIndex)
}